package cz.vse.adventura.po1715.xburj54_bursa.gui;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;
import cz.pecinovsky.english.pojj.adv_framework.game_txt.ICommand;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Collection;
import javax.swing.JButton;
import javax.swing.JPanel;

/*******************************************************************************
 * Instance třídy {@code CommandPane} představují seznam příkazů,
 * které je možno v průběhu hry zadat.
 *
 * @author    Jan Bursa
 * @version   1.01
 */
public class CommandsPane extends JPanel {
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
    /** GUI */
    private GUI_04 gui;

    /** Panel, na který se přidávají tlačítka */
    //private JPanel pane;

    /** Všechny příkazy hry  */
    private Collection<? extends ICommand> commands;

    /** pole názvů příkazů */
    private String[] NameCommands;

    /** Posluchač události stisku tlačítka v panelu. */
    private final ActionListener listener = new ButtonListener();

//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================
    /***************************************************************************
     *
     */
    public CommandsPane(IGameG game, GUI_04 gui) {
        this.gui = gui;
        commands = game.getAllCommands();
        int i = 0;
        NameCommands = new String[commands.size()];
        for(ICommand cmd : commands) {
            NameCommands[i] = cmd.getName();
            i++;
        }
        Arrays.sort(NameCommands);
        int rows = NameCommands.length/4;
         if(NameCommands.length%4 != 0 ) {
            rows += 1;
        }
        this.setLayout(new GridLayout(rows,4));
        addButtons();
    }
//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
    /** přidá tlačítka na panel */
    private void addButtons() {
        for(int i = 0; i<NameCommands.length; i++) {
            JButton button = new JButton(NameCommands[i]);
            this.add(button);
            button.addActionListener(listener);
        }
    }

//== INTERNÍ DATOVÉ TYPY =======================================================

    /***************************************************************************
     * Posluchač reagující na stisk tlačítka tím,
     * že vyvolá příkaz s názvem tlačítka jako jeho parametrem.
     */
    private class ButtonListener implements ActionListener
    {
        /***********************************************************************
         * Zadá příkaz, jehož parametrem bude nápis na tlačítku.
         *
         * @param event Ohlášená událost, od níž zjistíme nápis na tlačítku
         */
        @Override
        public void actionPerformed(ActionEvent event)
        {
            String argument = event.getActionCommand();
            gui.setInputText(argument);
        }

    }

//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        CommandPane inst = new CommandPane();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }


}
